package com.bsth.entity.schedule;

import com.bsth.entity.Cars;
import com.bsth.entity.Line;
import com.bsth.entity.Personnel;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import org.hibernate.annotations.Formula;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;

/**
 * 人员配置信息。
 */
@Entity
@Table(name = "bsth_c_s_ecinfo")
@NamedEntityGraphs({
    @NamedEntityGraph(name = "employeeConfigInfo_jsy_spy_xl", attributeNodes = {
            @NamedAttributeNode("jsy"),
            @NamedAttributeNode("spy"),
            @NamedAttributeNode("xl")
    })
})
@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"})
public class EmployeeConfigInfo extends BEntity implements Serializable {

    /** 主键Id */
    @Id
    @GeneratedValue
    private Long id;

    /** 线路关联 */
    @ManyToOne(optional = false, cascade = CascadeType.DETACH, fetch = FetchType.LAZY)
    private Line xl;
    /** 车辆关联（TODO：貌似没用了） */
    @ManyToOne(cascade = CascadeType.DETACH, fetch = FetchType.LAZY)
    private Cars cl;
    /** 人员关联（驾驶员） */
    @ManyToOne(optional = false, cascade = CascadeType.DETACH, fetch = FetchType.LAZY)
    private Personnel jsy;
    /** 人员关联（售票员） */
    @ManyToOne(cascade = CascadeType.DETACH, fetch = FetchType.LAZY)
    private Personnel spy;

    /** 搭班编码（是售票员和驾驶员搭配时使用，同一条线路搭班编码不能重复） */
    @NotNull
    private String dbbm;

    @Formula(" dbbm + 0 ")
    private Integer dbbmFormula;

    /** 是否删除（标记） */
    @Column(nullable = false)
    private Boolean isCancel = false;

    public EmployeeConfigInfo() {}

    public EmployeeConfigInfo(Object id, Object xlid, Object xlname, Object jsyid, Object spyid) {
        if (id != null) {
            this.id = Long.parseLong(id.toString());
        }
        if (xlid != null && xlname != null) {
            Line line = new Line();
            line.setId(Integer.valueOf(xlid.toString()));
            line.setName(xlname.toString());
            this.xl = line;
        }
        if (jsyid != null) {
            Personnel personnel = new Personnel();
            personnel.setId(Integer.valueOf(jsyid.toString()));
            this.jsy = personnel;
        }
        if (spyid != null) {
            Personnel personnel = new Personnel();
            personnel.setId(Integer.valueOf(spyid.toString()));
            this.spy = personnel;
        }
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Line getXl() {
        return xl;
    }

    public void setXl(Line xl) {
        this.xl = xl;
    }

    public Cars getCl() {
        return cl;
    }

    public void setCl(Cars cl) {
        this.cl = cl;
    }

    public Personnel getJsy() {
        return jsy;
    }

    public void setJsy(Personnel jsy) {
        this.jsy = jsy;
    }

    public Personnel getSpy() {
        return spy;
    }

    public void setSpy(Personnel spy) {
        this.spy = spy;
    }

    public String getDbbm() {
        return dbbm;
    }

    public void setDbbm(String dbbm) {
        this.dbbm = dbbm;
    }

    public Integer getDbbmFormula() {
        return dbbmFormula;
    }

    public void setDbbmFormula(Integer dbbmFormula) {
        this.dbbmFormula = dbbmFormula;
    }

    public Boolean getIsCancel() {
        return isCancel;
    }

    public void setIsCancel(Boolean isCancel) {
        this.isCancel = isCancel;
    }
}
